import axios from 'axios'
import qs from 'qs'
// import config from '../config'

// 配置公共的请求头 根据前端的跨域方式做调整(代理)/a/b : /api/a/b=>/a/b 
// 这种方式是代理的方式 切换不同的环境就在vue.config.js文件里面切换环境  
axios.defaults.baseURL = './api'

// 配置公共的请求头(基准url地址) 根据环境变量区别不同的环境
// axios.defaults.baseURL = config.baseURL

// 使用mock的接口
// axios.defaults.baseURL = '/api'

// 设置超时时间
axios.defaults.timeout = 10000

// 设置CORS跨域是否允许携带凭证
axios.defaults.withCredentials = true

/*
  post传来的参数格式
  1、x-www-form-urlencoded格式： xxx=xxx&xxx=xxx
  2、json格式
*/
// 设置post的请求头(规定传递参数的格式为普通表单格式（键值对）：xxx=xxx&xxx=xxx
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'

// 发送请求前处理request的的post参数
// 因为传递来的参数为json格式 所以将json格式转为普通表单格式（键值对）：xxx=xxx&xxx=xxx
axios.defaults.transformRequest = data => qs.stringify(data)

// 配置请求拦截器
axios.interceptors.request.use(config => {
  const token = window.localStorage.getItem('token')
  token && (config.headers.Authorization = token)
  return config
}, err => {
  return Promise.reject(err);
})

// 配置响应拦截器
axios.interceptors.response.use(response => {
  return response.data
}, err => {
  let { response } = err

  if (response) { // 错误服务器返回错误结果
    switch (response.status) {
      case 400:
        console.log('错误请求')
        break;
      case 401:
        console.log('未授权，请重新登录')
        break;
      case 403:
        console.log('拒绝访问 一般是token过期')
        localStorage.removeItem('token')
        // 跳转到登录页
        break;
      case 404:
        console.log('请求错误,未找到该资源')
        break;
      case 405:
        console.log('请求方法未允许')
        break;
      case 408:
        console.log('请求超时')
        break;
      case 500:
        console.log('服务器端出错')
        break;
      case 501:
        console.log('网络未实现')
        break;
      case 502:
        console.log('网络错误')
        break;
      case 503:
        console.log('服务不可用')
        break;
      case 504:
        console.log('网络超时')
        break;
      case 505:
        console.log('http版本不支持该请求')
        break;
      default:
        console.log(`连接错误${err.response.status}`)
    }
  } else { // 错误服务器啥都没返回（服务器崩了或是客户的没网）
    if (!window.navigator.onLine) {
      // 断网处理：可以跳转到断网页面 然后在断网页做个按钮刷新用this.$router.go(-1)返回之前页面
      return
    }
    return Promise.reject(err)
  }
  console.log(axios.defaults);
  
})
export default axios